package main

import (
	"github.com/kataras/iris/v12"
	"github.com/sirupsen/logrus"
	"net/http"
	"strconv"
)

// 1. 基本使用
// 2. 参数
// 3. 匹配规则函数 （正则，前缀，后缀，包含最大，最小，整数范围，支持自定义匹配规则函数）
// 4. 路由分组，Party方法来管理同一类API
// 5. 中间件 Use(middleware),可以在party上使用中间件
// 6. 错误信息自定义(错误码、先后顺序)
func main() {
	app := iris.Default()
	app.Use(iris.Compression)
	v1 := app.Party("/v1")
	v1.Use(func(ctx iris.Context) {
		logrus.Info("自定义中间件")
		ctx.Next()
	})
	// beego iris gin
	app.OnAnyErrorCode(func(ctx iris.Context) {
		ctx.WriteString("服务器貌似脱离了地球表面!")
	})
	app.OnErrorCode(http.StatusNotFound, func(ctx iris.Context) {
		ctx.WriteString("访问的路径不存在")
	})
	v1.Get("/hello", func(ctx iris.Context) {
		panic("出错了")
		ctx.HTML("<strong>%s%s</strong>!", "Hello", " World")
	})
	v1.Get("/getUser/{id:uint64}", func(ctx iris.Context) {
		id := ctx.Params().GetUint64Default("id", 0)
		ctx.WriteString(strconv.Itoa(int(id)))
	})

	v2 := app.Party("/v2")
	v2.Get("/users/{id:uint64 min(2)}", func(ctx iris.Context) {
		id := ctx.Params().GetUint64Default("id", 0)
		ctx.WriteString(strconv.Itoa(int(id)))
	})

	v2.Get("/filePath/{action:path}", func(ctx iris.Context) {
		action := ctx.Params().GetString("action")
		ctx.WriteString(action)
	})

	v2.Get("/olders/{action:string prefix(a_)}", func(ctx iris.Context) {
		action := ctx.Params().GetString("action")
		ctx.WriteString(action)
	})

	app.Run(iris.Addr(":8080"))
}
